package com.cskaoyan.javase.oop2._1extend._4hierarchy;

/**
 * @description: 继承层次
 * @author: wuguidong@cskaoyan.onaliyun.com
 **/

/**
 * Java当中的继承,有没有可能继承多个父类呢?
 * Java在设计上没有让子类可以直接拥有多个父类,Java当中，一个类没有两个直接父类,这称之为"单继承"或者"单重继承"
 * 一个子类可以拥有多个间接的父类
 *
 * 一个类,如果用extends关键字,直接继承了一个类,那么这个类就是它的直接父类
 * 而一个类,如果没有用extends关键字去继承任何类,那么它仍然具有Object作为直接父类
 * 以上,java当中一个类肯定都有一个直接父类,间接父类若干
 *
 * 如果允许一个类有多个直接父类,称之为"多继承"或者"多重继承"
 * 如果有"多继承",有何好处,有何缺点:
 *      1,好处显而易见,一个类如果能够同时扩展继承多个父类,程序会更加灵活,扩展性更好
 *      2,缺点也很显而易见,多重继承会让语法变得更复杂(比如多个同名成员如何选择的问题)
 * C++是支持多继承的
 *
 * 但是不管如何,java是不支持多继承的
 * 而实际上Java虽然不支持明面的多继承,但是暗地里是可以做到的:
 * 要想实现真正意义上的多继承,至少有以下两种方式:
 *      1,内部类(1.2)
 *      2,接口(Java8)
 * 最后说一点就是,不建议去使用多继承,实际开发中很少有程序员会这么做
 *
 * Java虽然不支持多重继承，但是父类还有父类，从而形成了继承链
 *
 *
 *
 *
 */
public class Demo {
    public static void main(String[] args) {
        //创建Grandson对象,有几种方式?
        Grandson g = new Grandson();
        Son s = new Grandson();
        Father f = new Grandson();
        Grandfather gf = new Grandson();
        Object o = new Grandson();

        //g.d
        //Grandson2 g2 = g;
    }
}
//Cyclic inheritance involving 'com.cskaoyan.javase.oop2._1extend._4hierarchy.Grandfather'
class Grandfather {
    int a = 10;
}

class Father extends Grandfather {
    int b = 20;
}

//class Father2{}
//Class cannot extend multiple classes java不支持多继承,只存在单继承
class Son extends Father {
    int c = 30;
}

class Grandson extends Son {
    int d = 40;
}

class Grandson2 extends Son {
}
